namespace Org.BouncyCastle.Asn1.X509
{
	/**
	 * The CRLReason enumeration.
	 * <pre>
	 * CRLReason ::= Enumerated {
	 *  unspecified             (0),
	 *  keyCompromise           (1),
	 *  cACompromise            (2),
	 *  affiliationChanged      (3),
	 *  superseded              (4),
	 *  cessationOfOperation    (5),
	 *  certificateHold         (6),
	 *  removeFromCRL           (8),
	 *  privilegeWithdrawn      (9),
	 *  aACompromise           (10)
	 * }
	 * </pre>
	 */
	public class CrlReason
		: DerEnumerated
	{
		public const int Unspecified = 0;
		public const int KeyCompromise = 1;
		public const int CACompromise = 2;
		public const int AffiliationChanged = 3;
		public const int Superseded = 4;
		public const int CessationOfOperation  = 5;
		public const int CertificateHold = 6;
		// 7 -> Unknown
		public const int RemoveFromCrl = 8;
		public const int PrivilegeWithdrawn = 9;
		public const int AACompromise = 10;

		private static readonly string[] ReasonString = new string[]
		{
			"Unspecified", "KeyCompromise", "CACompromise", "AffiliationChanged",
			"Superseded", "CessationOfOperation", "CertificateHold", "Unknown",
			"RemoveFromCrl", "PrivilegeWithdrawn", "AACompromise"
		};

		public CrlReason(
			int reason)
			: base(reason)
		{
		}

		public CrlReason(
			DerEnumerated reason)
			: base(reason.Value.IntValue)
		{
		}

		public override string ToString()
		{
			int reason = Value.IntValue;
			string str = (reason < 0 || reason > 10) ? "Invalid" : ReasonString[reason];
			return "CrlReason: " + str;
		}    
	}
}
